Remove existing signal connections in gtk_drag_dest_unset().
authorCody Russell <bratsche@gnome.org>
Fri, 29 Jan 2010 17:09:13 +0000 (11:09 -0600)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:55:29 +0000 (20:55 -0400)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=608370

gtk/gtkdnd.c

index bdd3ab9e72ac120dd01abc46e61c98226cb650cd..1ebc2848d8c2aa8f236362f06cb0d5c1787bdfa8 100644 (file)
@@ -1341,8 +1341,22 @@ gtk_drag_dest_set_proxy (GtkWidget      *widget,
 void 
 gtk_drag_dest_unset (GtkWidget *widget)
 {
+  GtkDragDestSite *old_site;
+
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
+  old_site = g_object_get_data (G_OBJECT (widget),
+                                "gtk-drag-dest");
+  if (old_site)
+    {
+      g_signal_handlers_disconnect_by_func (widget,
+                                            gtk_drag_dest_realized,
+                                            old_site);
+      g_signal_handlers_disconnect_by_func (widget,
+                                            gtk_drag_dest_hierarchy_changed,
+                                            old_site);
+    }
+
   g_object_set_data (G_OBJECT (widget), I_("gtk-drag-dest"), NULL);
 }